# -*- coding: utf-8 -*-#
#-------------------------------------------------------------------------------
# 建立者:        黄周云  
# Name:         test04
# Description:  例10.4
# Author:       ASUS
# Date:         2019/3/18
#-------------------------------------------------------------------------------

class FactorialDict:
    def __init__(self):
        self.numDict = {}
    #用于计算阶乘的方法
    def factorial(self,n):
        if n == 0 or n == 1:
            return 1
        else:
            return n*self.factorial(n-1)
    #从字典中获得key对应的value时调用的方法
    def __getitem__(self, key):
        print("__getitem__方法被调用，key={}".format(key))
        if key in self.numDict:
            return self.factorial(self.numDict[key])
        else:
            return 0
    #设置key对应的value时调用的方法
    def __setitem__(self, key, value):
        print("__setitem__方法被调用，key={}".format(key))
        self.numDict[key] = int(value)
    #使用del语句删除key对应的key-value对时调用
    def __delitem__(self, key):
        print("__delitem__方法被调用，key={}".format(key))
        del self.numDict[key]
    #使用len函数获取字典中key-value对个数时调用
    def __len__(self):
        print("__len__方法被调用")
        return len(self.numDict)

d = FactorialDict()
#调用__setitem__方法
d["4!"] = 4
d["7!"] = 7
d["12!"] = 12
#调用__getitem__方法
print("4!",'=',d["4!"])
print("7!","=",d["7!"])
print("12!","=",d["12!"])
#调用__len__方法
print('len','=',len(d))
#调用__delitem__方法
del d["7!"]
print("7!","=",d["7!"])
print('len','=',len(d))


